Como se ha visto anteriormente, los sistemas de etiquetaje son muy \'utiles para resolver algunas necesidades que tienen los usuarios, ya sea identificar quien sale en una fotograf\'ia o para fines m\'as espec\'ificos como etiquetar las proporciones humanas para normalizarlas seg\'un la raza. Para satisfacer dichas necesidades se implement\'o un sistema de etiquetaje totalmente personalizable, mediante el cual el usuario puede realizar pr\'acticamente cualquier tarea relacionada con \'este. No obstante, es posible que para tareas m\'as concretas, no nos baste con los tipos de etiquetas primitivos que disponemos. Un claro ejemplo es el etiquetaje de cuerpos humanos. 

\begin{figure}[here]
    \centering
    \includegraphics[scale=0.3]{figuras/kinect.png}
 \caption{Etiquetaje de cuerpos con {\em kinect}}
\end{figure}


Recientemente, se est\'a experimentando mucho con el reconocimiento autom\'atico del cuerpo humano con diversos fines. El m\'as conocido es el nuevo sistema de juego {\em Kinect}. \'este pretende utilizar una c\'amara en tres dimensiones  mediante la cual se pueda utilizar el cuerpo humano como mando. Para ello, los desarrolladores tuvieron que, previamente, etiquetar m\'as de 10.000 im\'agenes de cuerpos humanos para, posteriormente, desarrollar un algoritmo que detectara el cuerpo autom\'aticamente.

 Si quisi\'eramos etiquetar un cuerpo humano con una aplicaci\'on que solo permitiese crear etiquetas primitivas, deber\'iamos utilizar muchas de ellas a la vez. Adem\'as, cada una de ellas carecer\'ia de significado propio.  Es por ello, que para demostrar el potencial de {\em Label pro}, se ha tratado de implementar un m\'odulo mediante el cual se pueden etiquetar cuerpos humanos en tres dimensiones, consiguiendo con ello una mayor facilidad y comodidad para el desarrollador.

Por otra parte, dado que no todos los estudios requieren solamente de las posiciones de las articulaciones como {\em Kinect},  tambi\'en se implement\'o un simulador f\'isico para dicho cuerpo. Con esta mejora del sistema lo que se pretende es que, al etiquetar un cuerpo humano, solamente se puedan posicionar las articulaciones en posiciones en las que ser\'ia posible encontrarlas.  Dicho de otra manera, se pretende implementar un sistema de restricciones que no permita al cuerpo etiquetado, tomar posturas imposibles en el espacio tridimensional.



\section{Simulaci\'on f\'isica}

Desde mucho antes de que existieran las computadoras, los cient\'ificos han desarrollado teor\'ias sobre las leyes que rijen el universo y, cuando se inventaron las computadores, muchos han sido los que han experimentado intentando implementar dichas leyes. Pero uno de los problemas m\'as comunes que se encuentran en ese caso es que, los cient\'ificos hayan teor\'ias que aproximan una simulaci\'on f\'isica como mucho a un universo perfecto en el que las fuerzas externas que se le aplican a los objetos son la gravedad y el rozamiento, ni mucho menos tantas como en el mundo real ( humedad, viento...). Adem\'as, el implementar dichos algoritmos en un ordenador, la precisi\'on de estos no es infinita y tenemos una considerable p\'erdida de precisi\'on. Es por eso que uno de los objetivos de esta parte del proyecto fue minimizar el impacto de las imperfecciones para conseguir una mejor simulaci\'on f\'isica. Una vez situados los objetivos de esta parte del proyecto, se decidi\'o que aproximaci\'on se deb\'ia utilizar para simular el cuerpo humano.

Las aproximaciones que simulan las leyes f\'isicas del universo, se pueden dividir en dos tipos: las de part\'iculas y las de cuerpos r\'igidos. Cada una de ellas tiene unas ventajas y unos inconvenientes que se debieron valorar antes de elegir la aproximaci\'on que mejor simular\'ia nuestro sistema. Para determinar el contexto matem\'atico de cada uno de los sistemas de simulaci\'on f\'isica estudiados, se sigui\'o el articulo {\em Comparsion of ragdoll methods}  \cite{Verlet}.

\section{Simulaci\'on de part\'iculas}

Empezaremos observando una sola part\'icula. Una part\'icula es un objeto que no puede rotar sobre si mismo con una masa {\em m} y una posici\'on en el espacio. El vector posici\'on es definido con el sistema de coordenadas cartesianas del mundo, siendo el mundo el espacio en el que se est\'a simulando. Todas las part\'iculas deben ser descritas relativas a dicho sistema. En un tiempo {\em t} la posici\'on es dada por la funci\'on {\em r(t)}.

\[
\vec{r}(t) = \begin{bmatrix}x(t)\\{y(t)}\\{z(t)}\end{bmatrix}
\]

Donde {\em x,y} y {\em z} son las coordenadas en el espacio de tres dimensiones. La media de la velocidad entre dos posiciones $\Delta \vec{r}$, en un tiempo $\Delta$ t es


\[\vec{v}= \frac{\Delta\vec{t}}{\Delta t}\]


Por lo tanto, la velocidad instant\'anea de una part\'icula se haya haciendo que el intervalo de tiempo $\Delta$ t tienda a 0

\[\vec{v}(t)=\cdot{\vec{r}(t)} = \lim_{\Delta t \rightarrow 0}{\frac{\Delta\vec{r}}{\Delta t}}= \frac{d}{dt}\vec{r}(t)\]

La notaci\'on $ \cdot{\vec{r}(t)}$ hace referencia a la derivada de dicha funci\'on. Si queremos definir el vector de estado de una part\'icula, tambi\'en conocido como el vector de fase, lo hacemos de la siguiente manera

\[\vec{Y}(t) = \begin{bmatrix}\vec{r_1}(t)\\{\vec{v_1}(t)}\\ \vdots\\{\vec{r_n}(t)}\\{\vec{v_n}(t)}\end{bmatrix}\]

Lo que se ha explicado anteriormente es la parte que hace referencia a la cinem\'atica de las part\'iculas, no obstante, para la simulaci\'on del cuerpo humano, necesitamos aplicar fuerzas externas al sistema. Denotamos como $\vec{F}(t)$ el conjunto de fuerzas exteriores aplicadas a dicho sistema. Como dice la segunda ley de Newton $\vec{F} = m\vec{a}$ donde $\vec{a}$ es la aceleraci\'on y m es la masa.

\pagebreak

 La masa de una part\'icula se considera constante en estos casos. Como la aceleraci\'on cambia en un periodo de tiempo determinado, podemos definirla como se hizo anteriormente con la velocidad

\[\vec{a}(t)=\cdot{\cdot{\vec{r}(t)}} =\lim_{\Delta t \rightarrow 0}{\frac{\Delta\vec{v}}{\Delta t}}= \frac{d}{dt}\vec{v}(t)
= \vec{F}(t)/m\]

Esto quiere decir que si  la fuerza $\vec{F}(t)$ cambia en un tiempo t, tendr\'a influencia sobre la aceleraci\'on de la part\'icula y puede ser que cambie la direcci\'on y la velocidad de la misma. Podemos pues definir un cambio en el estado como la derivada del vector estado.

\[\cdot{\vec{Y}}(t) = \frac{d}{dt}\begin{bmatrix}\vec{r}(t)\\{\cdot{\vec{r}}(t)}\end{bmatrix} = \begin{bmatrix}\cdot{\vec{r}}(t)\\{\cdot{\cdot{\vec{r}}}(t)}\end{bmatrix} = \begin{bmatrix}\cdot{\vec{r}}(t)\\{\vec{F}(t)/m}\end{bmatrix}\]

Para actualizar el estado de cada part\'icula del sistema se utiliza un integrador. En este proyecto se utiliz\'o el integrador definido por {\em Thomas Jackobsen} del que m\'as adelante se ofrecer\'a una descripci\'on.


	





